/*********************************************************************
 * INCLUDES
 */
#include "timer.h"
TIM_HandleTypeDef htim1;
/**
  * @brief Initialize TIM1 related MSP
  */
 void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
 {
   /* Enable TIM1 clock */
   __HAL_RCC_TIM1_CLK_ENABLE();
   
   /* Set interrupt priority */
   HAL_NVIC_SetPriority(TIM1_UP_TIM10_IRQn, 0, 0);
   /* Enable TIM1 interrupt */
   HAL_NVIC_EnableIRQ(TIM1_UP_TIM10_IRQn);
 }
 
void timer_init(void)
{
    htim1.Instance = TIM1;                                         /* 选择TIM1 */
    htim1.Init.Prescaler = 144 - 1;                                /* 将时钟分频到 1MHz (144MHz / 144 = 1MHz) */
    htim1.Init.Period = 1000 - 1;                                  /* 自动重装载值，1ms (1MHz / 1000 = 1kHz) */
    htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;             /* 时钟不分频 */
    htim1.Init.CounterMode = TIM_COUNTERMODE_UP;                   /* 向上计数 */
    htim1.Init.RepetitionCounter = 0;                              /* 不重复计数 */
    htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; /* 自动重装载寄存器没有缓冲 */

    /* TIM1初始化 */
    if (HAL_TIM_Base_Init(&htim1) != HAL_OK)
    {
        APP_ErrorHandler();
    }

    /* TIM1使能启动，并使能中断 */
    if (HAL_TIM_Base_Start_IT(&htim1) != HAL_OK)
    {
        APP_ErrorHandler();
    }
}

/**
  * @brief  TIM更新中断回调函数
  * @param  htim：TIM句柄
  * @retval 无
  */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
   
    static char ticks = 0; // 累积的中断次数
    if (htim->Instance == TIM1)
    {
      ticks++; // 每次中断累积一次
			switch(ticks)
			{
			case 5: ticks = 0; break;
			
			}
				
			
        
        
    
      
      
    }
}
void delay_us(uint32_t _us)
{
    uint32_t ticks;
    uint32_t told;
    uint32_t tnow;
    uint32_t tcnt;
    uint32_t reload;

    reload = SysTick->LOAD;
    ticks = _us * (SystemCoreClock / 1000000); /* 需要的节拍数 */

    tcnt = 0;
    told = SysTick->VAL; /* 刚进入时的计数器值 */

    while (1)
    {
        tnow = SysTick->VAL;
        if (tnow != told)
        {
            /* SYSTICK是一个递减的计数器 */
            if (tnow < told)
            {
                tcnt += told - tnow;
            }
            /* 重新装载递减 */
            else
            {
                tcnt += reload - tnow + told;
            }
            told = tnow;

            /* 时间超过/等于要延迟的时间,则退出 */
            if (tcnt >= ticks)
            {
                break;
            }
        }
    }
}
/*********************************************************************
 * LOCAL FUNCTIONS
 */

/****************************************************END OF FILE****************************************************/
